/**
  ******************************************************************************
  * @file    Slib.h
  * @author  AE Team
  * @version 1.0.3
  * @date    2024-05-28
  * @brief   Slib.c 的头文件，在Slib.c中包含可以将函数链接到指定地址，
  *          在其他文件包含可以为Slib库提供函数指针接口
  ******************************************************************************
  * @attention
  *
  * <h2><center>&copy; Copyright (c) 2024 SIYIMicro.
  * All rights reserved.</center></h2>
  *
  *
  ******************************************************************************
  */


/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __SLIB_H
#define __SLIB_H

#ifdef __cplusplus
extern "C" {
#endif


/******************************************************************************/
/* Include files                                                              */
/******************************************************************************/
#include <stdint.h>
#include "sym32l010_hal_def.h"


/*******************************************************************************
 * @brief  Slib区函数，Led 闪烁PA03
 * @param  None
 * @retval None
 */
#define SlibApi_Led_Blink      ((void (*)(void))                       (0x0000FC00UL + 1))


/*******************************************************************************
 * @brief  Slib区函数，Delay函数
 * @param  DlyCnt : Delay 的计数
 * @retval None
 */
#define SlibApi_Delay          ((void (*)(uint32_t))                   (0x0000FE00UL + 1))


/*******************************************************************************
 * @brief  Slib区函数，获取Slib区内静态用户变量
 * @param  None
 * @retval Slib_UserValue : Slib区内定义的静态变量
 */
#define SlibApi_GetValue       ((uint32_t (*)(void))                   (0x0000FE40UL + 1))


/*******************************************************************************
 * @brief  Slib区函数，从FLASH读取1个Word
 * @param  Addr : 指向FLASH目标地址的指针
 * @retval Word ：返回读取的数据
 * @note   注意 : Addr 传入地址应该32bit位宽对齐
 */
#define SlibApi_ReadWord       ((uint32_t (*)(uint32_t*))              (0x0000FE80UL + 1))


/*******************************************************************************
 * @brief  Slib区函数，向FLASH写入1个Word
 * @param  Addr  : 指向FLASH目标地址的指针
 * @param  Value : 写入的值
 * @retval Word  ：返回写入的数据
 * @note   注意  : Addr 传入地址应该32bit位宽对齐
 */
#define SlibApi_WriteWord      ((uint32_t (*)(uint32_t*,uint32_t))     (0x0000FEC0UL + 1))


/*******************************************************************************
 * @brief  Slib区函数，页擦
 * @param  pStartAddr  : 指向起始地址的指针
 * @param  pEndAddr    : 指向结束地址的指针
 * @retval State       ：返回状态，0 代表正常，1代表出现错误
 * @note   注意        : 传入的起始与结束地址应该32bit位宽对齐
 */
#define SlibApi_ErasePage      ((uint8_t (*)(uint32_t*, uint32_t*))    (0x0000FF00UL + 1))


#endif /** SLIB_H **/

